package day_2022_1_to_2.day16;

//917. 仅仅反转字母
//给定一个字符串 S，返回 “反转后的” 字符串，其中不是字母的字符都保留在原地，而所有字母的位置发生反转。
//示例 1：
//输入："ab-cd"
//输出："dc-ba"

//示例 2：
//输入："a-bC-dEf-ghIj"
//输出："j-Ih-gfE-dCba"

public class Day13_2 {
    public static void main(String[] args) {
        String s=";1yDV";
        System.out.println(reverseOnlyLetters(s));
    }

    public static String reverseOnlyLetters(String s) {
        //将字符串转为字符数组
        char[] data=s.toCharArray();

        //new 一个arr数组存非字母，得到如 [a,a,-,a,-,a]形式的数组
        char[] arr=new char[data.length];
        for (int i = 0; i < data.length; i++) {
            int value=Integer.valueOf(data[i]);
            if(isNotLetter(value)){
                arr[i]=data[i];
            }else {
                arr[i]='a';
            }
        }

        //反转字符串，并只存字母，然后转为数组
        StringBuilder sb=new StringBuilder();
        for (int i = data.length-1; i >=0; i--) {
            int value=Integer.valueOf(data[i]);
            if(!isNotLetter(value)){
                sb.append(data[i]);
            }
        }
        String s1=sb.toString();
        char[] data1=s1.toCharArray();

        //得到相应形式字符串
        int k=0;
        for (int i = 0; i < data1.length; i++) {
            int value=Integer.valueOf(arr[k]);
            if(!isNotLetter(value)){
                arr[k]=data1[i];
                k++;
            }else {
                i--;
                k++;
            }
        }
        StringBuilder sb2=new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            sb2.append(arr[i]);
        }
        return sb2.toString();
    }

    //判断 不是字母，返回true.
    public static boolean isNotLetter(int value){
        if(value<65 || value>90&&value<97 || value>122 ){
            return true;
        }
        return false;
    }
}
